小小回顧一下,從第13天開始我們就引用了requests套件、第14天使用pandas資料科學套件,
試想想,如果我們剛學Python,若沒有了這些關鍵的『套件』,
每種功能都必須自己從底層刻起也將提高學習複雜度,
且,這些『等同齒輪重要的功能』似乎又曾在其他語言學習中似曾相識,
為『避免重造齒輪』Python讓你可以大量運用他人的套件來完成目前手中的專案。
而今天呢,我們需要使用的是datetime套件,
由於前面提到的都是字串為主,
就連日期參數都是字串格式,
若需要針對日期處理取判斷時就需要用到Python的datetime套件。
使用方式也只需要import進來即可「享用」,方便、省時又省力。
(一) datetime物件介紹
datetime,顧名思義,就是關於『日期時間』方面的套件。
使用尚須先將字串格式的日期轉換成datetime的datetime物件,
datetime物件可以做為日期的判斷甚至是日期的計算使用。
基本使用方式如下:
import datetime
#顯示目前系統日期
print('Date:', datetime.datetime.now().date())
#顯示目前系統時間
print('Time:', datetime.datetime.now().time())
# Output:
Date: 2022-09-30
Time: 13:50:30.593110
字串轉成datetime物件的方法:
Import datetime
#日期字串
date = ‘20220930’
#字串轉為datetime
date = strptime(date, ‘%Y%m%d’)
#使用weekday()判斷星期幾
print(date.weekday())
(二) datetime本次運用方式說明
正常狀況下由於股市周末六、日休市,因此這兩天不會有股價資訊,
所以我們的程式就需要判斷是否為周一~周五工作日,
但也有例外,就是例假日前後補班的情形,就有可能遇到周六有股價資訊,
具體的說法就是只取工作日,
來過濾掉不必上班的日期範圍(本次我們先取得一般的周一~周五工作日,其餘的補假或補班,
我們後續的實作時再用例外處理的方式)。
本次的日期範圍是: "20221003"~"20221011"
會遇到10/10補假的狀況,但本次設計暫不處理。
(三) datetime本次實作
接著開啟我們 「親愛的 Spyder」,
最好自己打字的方式來熟練Python的語法與細部狀況處理。
程式碼如下:
import datetime
#起始日期
startDate = "20221003"
#結束日期
endDate = "20221011"
startDate = datetime.datetime.strptime(startDate, '%Y%m%d')
endDate = datetime.datetime.strptime(endDate, '%Y%m%d')
# 算出起始到結束共幾天
days = (endDate - startDate).days + 1
# 建立一個list承接工作日的日期
dates = []
for dayNum in range(days):
# 從起始日開始依次
date = (startDate + datetime.timedelta(days=dayNum))
#過濾掉週六、日
if date.weekday() < 5:
dates.append(date.strftime('%Y%m%d'))
print(dates)
# output
['20221003', '20221004', '20221005', '20221006', '20221007', '20221010', '20221011']
顯示的結果排除10月8日星期六、10月9日星期日,
本次暫不考慮國定假日的規則設計,
主要希望剛接觸的學習人員可以專注在datetime的功能上,
較為細部的微調我們後面的日子再來調整。
哇! ~日子過得好快已經第15天了,總算快要可以出關大吃大喝了,
哈! 在得意之前,我們明天繼續修練Python心法。